package ar.edu.caece.compiler.grammar.terminals;

import ar.edu.caece.compiler.model.Token;
import ar.edu.caece.compiler.grammar.GrammarSymbol;
import ar.edu.caece.compiler.grammar.TokenVisitorInterface;

public class DoToken extends GrammarTerminal {

	public DoToken(Token token) {
		super(token);
	}

	public static interface DoTokenVisitor extends TokenVisitorInterface {
		public GrammarSymbol doCase(DoToken llamador);
	}
	
	public static abstract class DoChainVisitor implements DoTokenVisitor {
		private TokenVisitorInterface siguiente;
		protected DoChainVisitor(TokenVisitorInterface siguienteVisitor) {
			siguiente = siguienteVisitor;
		}
		
		public GrammarSymbol defaultCase(GrammarTerminal llamador) throws Exception {
			return llamador.execute(siguiente);
		}
	}

	@Override
	public GrammarSymbol execute(TokenVisitorInterface visitor) throws Exception {
		return (visitor instanceof DoTokenVisitor)? ((DoTokenVisitor) visitor).doCase(this):
			visitor.defaultCase(this);
		
	}
}
